package auction



/**
 * 
 * By default, jobs will not be executed when running under the test environment.	
 * read: 
 */


//TODO: CheckEndDatesJob.schedule(Date scheduleDate, Map params?) Methode beim Anlegen und Bearbeiten
//		von Auktionen aufrufen um Job zu schedulen (resourcenschonender als permanentes checken von allen Auktionen)
class CheckEndDatesJob {
	def EmailService

	static triggers = {
		// job nur einmal ausführen, wenn er getriggert wird
        simple name:'auctionTrigger', startDelay:1, repeatInterval: 0, repeatCount: 0
	}

    def execute(context) {
		//println(new Date().toString() + " - CheckEndDatesJob executed " + context); // for debugging only
		
		// auctionInstance aus params map / context holen
		def auctionInstance = context.mergedJobDataMap.get('auctionInstance')
		//Email-Services nur aufrufen, falls Auktion in der Vergangenheit liegt und bisher keine
		//Benachrichtigung gesendet wurde. Überprüfung des Datums notwendig, weil durch nachträgliche
		//Änderungen durch den Nutzer oder Admin evt. mehrere Jobs pro Auktion gescheduled werden.
		if (auctionInstance != null && new Date() >= auctionInstance.endDate && !(auctionInstance?.notificationSent))
		{
			EmailService.notifyAuctioneer(auctionInstance)
			EmailService.notifyHighestBidder(auctionInstance)
			println("Notifications sent")
			// mails sent -> update object
			auctionInstance.notificationSent = true
			auctionInstance.save()
		}

    }
}
